#!/usr/bin/env node

/**
 * 简单删除数据库表脚本
 */

const mysql = require('mysql2/promise');

const remoteDbConfig = {
    host: '43.143.253.188',
    port: 3306,
    user: 'nextjs',
    password: 'yEAiRE2jcxTyRBy5',
    database: 'nextjs',
    charset: 'utf8mb4'
};

async function simpleDropTables() {
    let connection;
    
    try {
        console.log('🔌 连接远程数据库...');
        connection = await mysql.createConnection(remoteDbConfig);
        console.log('✅ 远程数据库连接成功');
        
        // 禁用外键检查
        console.log('🔧 禁用外键检查...');
        await connection.execute('SET FOREIGN_KEY_CHECKS = 0');
        
        // 直接使用SHOW TABLES获取表名
        console.log('📋 获取所有表名...');
        const [tables] = await connection.execute('SHOW TABLES');
        
        console.log(`📊 找到 ${tables.length} 个表需要删除:`);
        
        if (tables.length > 0) {
            // 获取表名（SHOW TABLES返回的字段名是动态的）
            const tableNames = tables.map(row => Object.values(row)[0]);
            
            tableNames.forEach((tableName, index) => {
                console.log(`   ${index + 1}. ${tableName}`);
            });
            
            // 逐个删除表
            console.log('\n🗑️ 开始删除所有表...');
            let successCount = 0;
            let errorCount = 0;
            
            for (const tableName of tableNames) {
                try {
                    await connection.execute(`DROP TABLE IF EXISTS \`${tableName}\``);
                    console.log(`✅ 删除表: ${tableName}`);
                    successCount++;
                } catch (error) {
                    console.error(`❌ 删除表失败 ${tableName}:`, error.message);
                    errorCount++;
                }
            }
            
            console.log(`\n📊 删除完成: 成功 ${successCount} 个, 失败 ${errorCount} 个`);
        } else {
            console.log('✅ 数据库中没有表需要删除');
        }
        
        // 重新启用外键检查
        console.log('\n🔧 重新启用外键检查...');
        await connection.execute('SET FOREIGN_KEY_CHECKS = 1');
        
        // 验证删除结果
        console.log('🔍 验证删除结果...');
        const [remainingTables] = await connection.execute('SHOW TABLES');
        
        console.log(`📊 剩余表数: ${remainingTables.length} 个`);
        
        if (remainingTables.length === 0) {
            console.log('\n🎉 所有表已成功删除！数据库已清空。');
        } else {
            console.log('\n⚠️ 仍有表未删除。');
        }
        
    } catch (error) {
        console.error('❌ 删除表过程中发生错误:', error.message);
        throw error;
    } finally {
        if (connection) {
            await connection.end();
            console.log('\n🔌 数据库连接已关闭');
        }
    }
}

// 运行删除
async function main() {
    console.log('🎯 简单删除数据库表脚本');
    console.log('   功能：删除远程数据库中的所有表\n');
    
    await simpleDropTables();
}

// 如果直接运行此脚本
if (require.main === module) {
    main().catch((error) => {
        console.error('💥 删除脚本执行失败:', error.message);
        process.exit(1);
    });
}

module.exports = { simpleDropTables };
